package es.udc.acs.banco.client;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Formatter;

import es.udc.acs.banco.sesion.ControlSesion;
import es.udc.acs.banco.sesion.Sesion;
import es.udc.acs.banco.util.GestorProperties;
import es.udc.acs.utils.CodigosFAP;

public class ControlClient {
	
	private static String idconsorcio;
	private static String pbanco;
	private static String idbanco;
	private static String ncanales;

	static {		

		pbanco = GestorProperties.devolverPropiedad(
				GestorProperties.PUERTOBANCO);
		idconsorcio = GestorProperties.devolverPropiedad(
				GestorProperties.IDCONSORCIO);
		idbanco = GestorProperties.devolverPropiedad(
				GestorProperties.IDBANCO);
		ncanales = GestorProperties.devolverPropiedad(
				GestorProperties.NUMCANALES);

	}
	
	private ControlClient(){}
	
	private static String obtenerCabecera(String tipo) {
		
		return idbanco+idconsorcio+tipo;
	}
	
	private static String obtenerFechaHora() {
		
		SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyyHH:mm:ss");
		
		return fmt.format(new Date());
	}
	
	
	public static String mensajeSolicitarAbrirSesion(){
		
        Formatter fmt = new Formatter();

		int canales = Integer.parseInt(ncanales);
		
		if (canales < 0)  canales = 1;
		if (canales > 99) canales = 99;
		
        // añadimos ceros a la izquierda si fuera necesario
        fmt.format("%02d",canales);
		
		return obtenerCabecera(CodigosFAP.CM_B_PC_ABRIR_SESION)
			   +fmt.toString()
			   +obtenerFechaHora()
			   +pbanco;
	}
	
	
	public static String mensajeSolicitarDetenerTrafico(){
		
		return obtenerCabecera(CodigosFAP.CM_B_PC_DETENER_TRAFICO);
	}
	
	
	public static String mensajeSolicitarReanudarTrafico(){
		
		return obtenerCabecera(CodigosFAP.CM_B_PC_REANUDAR_TRAFICO);
	}
	
	
	public static String mensajeSolicitarCierreSesion(){
		
		try {
			Sesion sesion = ControlSesion.obtenerSesion();
	        Formatter fmt = new Formatter();
	        
	        fmt.format("%010d",sesion.obtenerAbonos());
	        String abonos = fmt.toString();
	        
			fmt = new Formatter();
	        fmt.format("%010d",sesion.obtenerReintegros());
	        String reintegros = fmt.toString();
	        
	        fmt = new Formatter();
	        fmt.format("%010d",sesion.obtenerTraspasos());
	        String traspasos = fmt.toString();

			
			return obtenerCabecera(CodigosFAP.CM_B_PC_CIERRE_SESION)
				   +reintegros
				   +abonos
				   +traspasos;

		} catch (Exception e) {
			return null;
		}		
	}
}
